package com.sunriz.javafx;

import com.sunriz.javafx.server.Constant.ScadaConstant;
import com.sunriz.javafx.views.ScadaController;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

@Slf4j
public class MainApplication extends javafx.application.Application {

    /**
     * 检查scadaFile文件夹是否存在，如不存在则创建文件夹且创建demo.json文件
     * 如果文件夹存在，检查是是否有json文件，如果没有则创建
     */
    static {
        String filePath = ScadaConstant.FILE_PATH;
        File folder = new File(filePath);

        // 检查scada配置文件夹是否存在
        if (!folder.exists()) {
            boolean isCreated = folder.mkdirs();
            log.info("{}不存在，新建文件夹", filePath);
            if (isCreated) {
                File demoJsonFile = new File(folder, "demo.json");
                try {
                    FileWriter fileWriter = new FileWriter(demoJsonFile);
                    fileWriter.write(ScadaConstant.DEMO_JSON);
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                log.info("不存在.json文件，新建demo.json文件");
            } else {
                log.error("{}不存在，新建文件夹失败", filePath);
            }
        } else {
            // 文件夹存在，检查是否有.json文件
            File[] jsonFiles = folder.listFiles(file -> file.isFile() && file.getName().endsWith(".json"));

            if (jsonFiles == null || jsonFiles.length == 0) {
                // 如果没有.json文件，则在文件夹内创建demo.json文件
                File demoJsonFile = new File(folder, "demo.json");
                try {
                    boolean isCreated = demoJsonFile.createNewFile();
                    if (isCreated) {
                        FileWriter fileWriter = new FileWriter(demoJsonFile);
                        fileWriter.write(ScadaConstant.DEMO_JSON);
                        fileWriter.close();
                        log.info("{}存在但无.json文件，新建demo.json文件", filePath);
                    } else {
                        log.error("{}存在但无.json文件，新建demo.json文件失败", filePath);
                    }
                } catch (Exception e) {
                    log.error("创建demo.json文件时发生错误", e);
                }
            } else {
                log.info("{}存在且包含.json文件，跳过", filePath);
            }
        }
    }
    @Override
    public void start(Stage stage) {
        // 创建第一个界面的Label和按钮
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");

        Label label = new Label("Hello, 你的JavaFX版本是： " + javafxVersion + ", Java版本是 " + javaVersion + ".");

        // 创建按钮并设置动作
        Button btnGoToScene2 = new Button("Go to Scada");
        btnGoToScene2.setOnAction(e -> goToScada(stage));
        // 设置按钮样式，使其更大并居中
        btnGoToScene2.setStyle("-fx-font-size: 20px; -fx-padding: 20px 40px;"); // 调整字体大小和内边距
        StackPane.setAlignment(btnGoToScene2, Pos.CENTER); // 设置按钮在StackPane中居中

        // 设置按钮在 StackPane 中的位置（底部居中）
//        StackPane.setAlignment(btnGoToScene2, javafx.geometry.Pos.BOTTOM_CENTER);

        StackPane root = new StackPane(label, btnGoToScene2);
        Scene scene1 = new Scene(root, 1100, 750);

        stage.setTitle("Main Scene");
        stage.setScene(scene1);
        stage.show();
    }

    private static void goToScada(Stage stage) {
        // 切换到第二个界面
        ScadaController.show(stage);
    }

    public static void show(Stage stage) {
        // 创建第一个界面的内容
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");

        Label label = new Label("Hello, 你的JavaFX版本是： " + javafxVersion + ", Java版本是 " + javaVersion + ".");

        // 创建按钮并设置动作
        Button btnGoToScene2 = new Button("Go to Scada");
        btnGoToScene2.setOnAction(e -> goToScada(stage));
        // 设置按钮样式，使其更大并居中
        btnGoToScene2.setStyle("-fx-font-size: 20px; -fx-padding: 20px 40px;"); // 调整字体大小和内边距
        StackPane.setAlignment(btnGoToScene2, Pos.CENTER); // 设置按钮在StackPane中居中

        // 设置按钮在 StackPane 中的位置（底部居中）
//        StackPane.setAlignment(btnGoToScene2, javafx.geometry.Pos.BOTTOM_CENTER);

        StackPane rootScene1 = new StackPane(label, btnGoToScene2);
        Scene scene1 = new Scene(rootScene1, 1100, 750);

        // 切换回第一个界面
        stage.setScene(scene1);
    }

    public static void main(String[] args) {
        launch();
    }
}